﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.IO;

namespace Aliyeye.Car.Net.Utility
{
    public class CMDHelper
    {
        public static string RunCmd(string strCmd)
        {
            // 实例一个Process类,启动一个独立进程
            Process p = new Process();
            // 设定程序名
            p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.LoadUserProfile = true;
            // 关闭Shell的使用
            p.StartInfo.UseShellExecute = false;
            // 重定向标准输入
            p.StartInfo.RedirectStandardInput = true;
            // 重定向标准输出
            p.StartInfo.RedirectStandardOutput = true;
            //重定向错误输出
            p.StartInfo.RedirectStandardError = true;
            // 设置不显示窗口
            p.StartInfo.CreateNoWindow = true;
            // 启动进程
            string pingrst;
            p.Start();
            p.StandardInput.WriteLine(strCmd);
            p.StandardInput.WriteLine("exit");
            string strRst = p.StandardOutput.ReadToEnd();            
            //string strRst = "";
            //using (StreamReader reader = p.StandardOutput)
            //{
            //    string line = "";
            //    while (reader.ReadLine() != null)
            //    {
            //        line = reader.ReadLine();
            //        strRst = line;
            //    }
            //}
            // 从输出流获取命令执行结果

            pingrst = strRst;
            // if end
            p.Close();
            return pingrst;
        }

        /// <summary>
        /// 关闭进程
        /// </summary>
        /// <param name="ProcName">进程名称</param>
        /// <returns></returns>
        public static bool CloseProcess(string ProcName)
        {
            bool result = false;
            System.Collections.ArrayList procList = new System.Collections.ArrayList();
            string tempName = "";
            int begpos;
            int endpos;
            foreach (System.Diagnostics.Process thisProc in System.Diagnostics.Process.GetProcesses())
            {
                tempName = thisProc.ToString();
                begpos = tempName.IndexOf("(") + 1;
                endpos = tempName.IndexOf(")");
                tempName = tempName.Substring(begpos, endpos - begpos);
                procList.Add(tempName);
                if (tempName == ProcName)
                {
                    if (!thisProc.CloseMainWindow())
                        thisProc.Kill(); // 当发送关闭窗口命令无效时强行结束进程
                    result = true;
                }
            }
            return result;
        } 


    }
}
